package logic;

/**
 * Interface de itens emprestáveis.
 * @author Guilherme
 *
 */
public interface RentableItem {

	/**
	 * Avalia um determinado item. 
	 * @param points Pontos dados ao item. DEVE estar entre 1 - 5 ou gerara erro.
	 * @param User u usuário que fez a avaliação
	 * @throws Exception Caso a avaliação ocorra com parametros inválidos ou mais que uma vez.
	 */
	public void rate(String userUid, int points) throws Exception;
	
	/**
	 * Mostra o valor da avaliação total do item.
	 * @return boolean com o valor da avaliação global do item.
	 * @throws Exception 
	 */
	public double getRate() throws Exception;
	
	/**
	 * Diz se o item está disponível ou não. 
	 * @return true se disponivel.
	 */
	public boolean available();
	
	/**
	 * Um objeto do tipo usuário que inseriu o livro na biblioteca.
	 * @return User usuario que inseriu o livro na biblioteca.
	 */
	public User getOwner();
	
	/**
	 * Um objeto do tipo usuário que está atualmente com o livro.
	 * @return User usuario que esta atualmente com o livro. 
	 */
	public User getHolder();
	
}
